ReactNative(expo)のプロジェクトで、pod install時にエラー「Invalid Podfile file: undefined method `exists?' for File:Class.」が起きるようになったので、対処法をまとめました。

エラー内容

 $ (cd ios && pod install)
Using Expo modules
[Expo] Enabling modular headers for pod ExpoModulesCore

[!] Invalid `Podfile` file: undefined method `exists?' for File:Class.

 #  from /Users/hirasaki/work/DiFENDER/sources/bluebird-app/ios/Podfile:13
 #  -------------------------------------------
 #  target 'bluebirdapp' do
 >    use_expo_modules!
 #    config = use_native_modules!
 #  -------------------------------------------
$ yarn ios
yarn run v1.22.19
$ expo run:ios
⚠️  Something went wrong running `pod install` in the `ios` directory.
Command `pod install` failed.
└─ Cause: Invalid `Podfile` file: undefined method `exists?' for File:Class.

 #  from ~/myproject/ios/Podfile:13
 #  -------------------------------------------
 #  target 'bluebirdapp' do
 >    use_expo_modules!
 #    config = use_native_modules!
 #  -------------------------------------------

✨  Done in 2.70s.

原因

pod install fails with use_expo_modules! 調べてみたところ、こちらで議論がされてて、どうやらrubyのバージョンが違うみたいでした。

$ ruby -v
ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [arm64-darwin22]
$ gem -v
3.1.6

rubyのversionは3.1を使用するみたいです。 私はrbenvを使っているので、それを使ってrubyのアップデートを行いました。

対策

ruby@3.1をインストールして、localでプロジェクトのディレクトリに適用します。

$ rbenv install 3.1.3
$ rbenv local 3.1.3
$ ruby -v
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [arm64-darwin22]
 $ gem -v
3.3.26

rubyのバージョンがあがったので、再度pod updateを試みます。

$ gem install cocoapods
$ npx pod-install
$ yarn ios
コンパイルが通って、エミュレータが動きました!